package com.rent.common.interceptor;

import lombok.Data;

/**
 * 用户上下文
 * 使用ThreadLocal存储当前登录用户信息
 */
public class UserContext {
    
    /**
     * 用户信息ThreadLocal
     */
    private static final ThreadLocal<UserInfo> USER_THREAD_LOCAL = new ThreadLocal<>();
    
    /**
     * 设置用户信息
     * 
     * @param userInfo 用户信息
     */
    public static void setUser(UserInfo userInfo) {
        USER_THREAD_LOCAL.set(userInfo);
    }
    
    /**
     * 获取用户信息
     * 
     * @return 用户信息
     */
    public static UserInfo getUser() {
        return USER_THREAD_LOCAL.get();
    }
    
    /**
     * 获取用户ID
     * 
     * @return 用户ID
     */
    public static Long getUserId() {
        UserInfo userInfo = USER_THREAD_LOCAL.get();
        return userInfo != null ? userInfo.getUserId() : null;
    }
    
    /**
     * 获取用户名
     * 
     * @return 用户名
     */
    public static String getUsername() {
        UserInfo userInfo = USER_THREAD_LOCAL.get();
        return userInfo != null ? userInfo.getUsername() : null;
    }
    
    /**
     * 获取用户角色
     * 
     * @return 用户角色
     */
    public static Integer getRole() {
        UserInfo userInfo = USER_THREAD_LOCAL.get();
        return userInfo != null ? userInfo.getRole() : null;
    }
    
    /**
     * 清除用户信息
     */
    public static void clear() {
        USER_THREAD_LOCAL.remove();
    }
    
    /**
     * 用户信息类
     */
    @Data
    public static class UserInfo {
        /**
         * 用户ID
         */
        private Long userId;
        
        /**
         * 用户名
         */
        private String username;
        
        /**
         * 用户角色
         */
        private Integer role;
        
        public UserInfo(Long userId, String username, Integer role) {
            this.userId = userId;
            this.username = username;
            this.role = role;
        }
    }
}

